#include <Adafruit_SSD1327.h>
#include <Adafruit_NeoPixel.h>
#include <WiFi.h>
// Settings for OLED
#define OLED_CLK SCK
#define OLED_MOSI MOSI
#define OLED_CS D2
#define OLED_DC D3
#define OLED_RESET D0
Adafruit_SSD1327 display(128, 128, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
// Settings for NEOPIXEL
#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif
#define PIN D1 // On Trinket or Gemma, suggest changing this to 1
#define NUMPIXELS 1 // Popular NeoPixel ring size
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
// Settings for WIFI
const char* ssid = "Fablab";
const char* password = "Fabricationlab1";
WiFiServer server(80); // Webservers usually listen on port 80
int connectionCounter = 1;
int btn = D0;
void setup()
{
pinMode(btn, INPUT_PULLUP);
//pinMode(led, OUTPUT);
Serial.begin(9600);
//Initalizing the oled
Serial.println("SSD1327 OLED test");
if ( ! display.begin(0x3D) ) {
Serial.println("Unable to initialize OLED");
while (1) yield();
}
display.clearDisplay();
display.display();
display.setTextSize(1);
display.setTextColor(SSD1327_WHITE);
display.setCursor(0,0);
display.setTextWrap(true);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
print_all("Connecting to");
print_all(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
display.println("WiFi connected");
display.println("IP address: ");
display.println(WiFi.localIP());
display.display();
server.begin(); // Start webserver
pixels.begin(); // Start neopixel
pixels.clear();
}
void loop()
{
// Do we have someone connecting?
WiFiClient client = server.available();
if (client) {
Serial.println();
Serial.println("Client connected.");
//display.println("Client connected.");
//display.display();
if (client.connected()) {
String incoming = "";
while (client.available()) {
char c = client.read();
incoming += c;
}
//incoming = incoming.trim();
//Serial.println(incoming);
// Extract just the first line
int charCounter = 0;
String firstLine = "";
while (incoming.charAt(charCounter) != '\n') {
firstLine += incoming.charAt(charCounter);
charCounter++;
}
Serial.println(firstLine);
// Extract query
charCounter = 0;
bool firstSpace = false;
String query = "";
while (charCounter < firstLine.length()) {
char c = firstLine.charAt(charCounter);
if (c == ' ') {
if (firstSpace) {
break;
} else {
firstSpace = true;
}
}
if (firstSpace == true && c != ' ') {
query += c;
}
charCounter++;
}
Serial.println(query);
String response = "";
if (query == "/turnLedOn") {
response = "Turning LED on.";
//digitalWrite(led, HIGH);
pixels.setPixelColor(0, pixels.Color(255, 255, 255));
pixels.show();
display.setCursor(0,0);
display.clearDisplay();
display.println("Turning LED on");
display.display();
}
else if (query == "/turnLedOff") {
response = "Turning LED off";
//digitalWrite(led, LOW);
pixels.clear();
pixels.show();
display.setCursor(0,0);
display.clearDisplay();
display.println("Turning LED off");
display.display();
}
else if (query == "/getButtonState") {
response = "Button state is ";
int buttonState = digitalRead(btn);
response += String(buttonState);
display.setCursor(0,0);
display.clearDisplay();
display.print("Button state is: ");
display.println(String(buttonState));
display.display();
}
else {
response = "Unknown request: ";
display.setCursor(0,0);
display.clearDisplay();
display.print("Unknown request: ");
display.println(query);
display.display();
response += query;
}
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println(response);
/*
client.println("<html>");
int btnState = digitalRead(btn);
client.print("Button down? ");
client.print(btnState);
client.println("<br>");
client.print("This was attempt number ");
client.print(connectionCounter);
client.println("<br>");
connectionCounter++;
client.println("</html>");
*/
// give the web browser time to receive the data
delay(1);
client.stop();
Serial.println("Client disconnected");
}
}
}
void print_all(String content){
display.println(content);
Serial.println(content);
display.display();
}